#ifndef CRYPTUTILS_H
#define CRYPTUTILS_H

#include <QCryptographicHash>
#include <QString>
#include <QByteArray>
#include <QMap>
#include <QDateTime>

class CryptUtils
{
public:
    /**
     * @brief generateMD5 生成MD5哈希值
     * @param data 输入数据
     * @return MD5哈希值的十六进制字符串
     */
    static QString generateMD5(const QString &data);

    /**
     * @brief generateEncryptedMessage 生成加密消息
     * @param username 用户名
     * @param salt 盐值
     * @return 加密后的消息
     */
    static QString generateEncryptedMessage(const QString &username, const QString &salt);

    /**
     * @brief generateToken 生成token
     * @param data 输入数据
     * @param secret 密钥
     * @return token字符串
     */
    static QString generateToken(const QString &data, const QString &secret = "f6fdffe48c908deb0f4c3bd36c032e72");
};

class KVQuery
{
public:
    KVQuery(const QString &secret = "f6fdffe48c908deb0f4c3bd36c032e72");
    void add(const QString &key, const QString &value);
    void erase(const QString &key);
    void clear();
    QString getQueryParameter();

private:
    QString toString() const;
    QMap<QString, QString> _map; // 密文构建需要按字典序
};

#endif // CRYPTUTILS_H